package fr.afcepf.ai89.esharing.data;

import java.util.Date;
import java.util.List;

import javax.ejb.Remote;

import fr.afcepf.ai89.esharing.entity.Aem;
import fr.afcepf.ai89.esharing.entity.Avis;
import fr.afcepf.ai89.esharing.entity.Emprunt;
import fr.afcepf.ai89.esharing.entity.Proprietaire;
@Remote
public interface IDAOEmprunt {
	
	// Méthodes qui peuvent s'appliquer à tous les partis :
	
	Emprunt getEmprunt(int idEmprunt);
	
	int majEmprunt(Emprunt emprunt);
	int annulerEmprunt(Emprunt emprunt);
	
	List<Emprunt> getEmprunts();
	List<Emprunt> getEmprunts(Aem aem);
	List<Emprunt> getEmprunts(Date debut, Date fin);
	
	// Méthodes qui s'appliquent uniquement aux emprunteurs :
	
	List<Emprunt> getEmprunts(Proprietaire prop);
	
	List<Emprunt> getEmpruntsPasses(Proprietaire prop);
	List<Emprunt> getEmpruntsEnCours(Proprietaire prop);
	List<Emprunt> getEmpruntsPlannifies(Proprietaire prop);
	List<Emprunt> getEmpruntsNonValides(Proprietaire prop);
	List<Emprunt> getEmpruntsAnnules(Proprietaire prop);
	List<Emprunt> getEmpruntsRefuses(Proprietaire prop);
	
	int demanderEmprunt(Emprunt emprunt);

	int laisserAvisSurEmprunteur(Emprunt emprunt);
	
	// Méthodes qui s'appliquent uniquement aux prêteurs :
	
	List<Emprunt> getPrets(Proprietaire prop);
	List<Emprunt> getPrets(Date debut, Date fin);
	
	List<Emprunt> getPretsPasses(Proprietaire prop);
	List<Emprunt> getPretsEnCours(Proprietaire prop);
	List<Emprunt> getPretsPlannifies(Proprietaire prop);
	List<Emprunt> getPretsNonValides(Proprietaire prop);
	List<Emprunt> getPretsAnnules(Proprietaire prop);
	List<Emprunt> getPretsRefuses(Proprietaire prop);
	
	int validerEmprunt(Emprunt emprunt);
	int refuserEmprunt(Emprunt emprunt);
	int marquerAemRendu(Emprunt emprunt);

	int laisserAvisSurPreteur(Emprunt emprunt);

	Emprunt getEmprunt(Avis a);
	
}
